Preparando o ambiente com os pacotes necessários para a análise.
library(dplyr)
library(readxl)
library(tidyr)
Vamos calcular cada ano separadamente.
pop_censo <-
read_excel("dados/populacao_BRASIL_censo_2022.xlsx") |>
filter(Idade != "Total") |>
select(-Todos) |>
gather(key = "Sexo", value = "Pop_censo",
2:3) |>
mutate(Sexo = if_else(Sexo == "Homem",
"Masculino","Feminino"))
DT::datatable(pop_censo)
As populações para os sexos masculino e feminino são, respectivamente, 98.532.431 e 104.548.325
pop_censo |>
group_by(Sexo) |>
summarise(populacao = sum(Pop_censo))
## # A tibble: 2 × 2
## Sexo populacao
## <chr> <dbl>
## 1 Feminino 104548325
## 2 Masculino 98532431
O primeiro passo consiste em calcular a taxa de mortalidade específica.
Houve uma quantidade considerável de valores nulos para
alguns estados (ex.: Paraná). Por hora, vou retirar o estado para
conseguir rodar tudo, mas tendo uma carga de dados atualizada é só rodar
novamente sem o último filter.
sim_2020 <- read_excel("dados/redistribucao_CG_DO_2020.xlsx")
sim_2020_tratado <-
sim_2020 |>
mutate(taxa_especifica = (obito/populacao) * 100000) |>
mutate(taxa_especifica = round(taxa_especifica, 4))
Agora vamos fazer os seguintes procedimentos:
Juntar as bases de taxa de mortalidade específica com a população padronizada pelo censo 2022;
Calcular o total de óbitos esperados;
Calcular a taxa de mortalidade padronizada.
sim_2020_tratado_censo <-
sim_2020_tratado |>
left_join(pop_censo,
by = c("idade"="Idade","sexo"="Sexo")) |>
mutate(obitos_esperados = (Pop_censo * taxa_especifica)/100000)
Por fim, vamos calcular a taxa padronizada.
sim_2020_padronizado <-
sim_2020_tratado_censo |>
group_by(ano, uf, cdmun, sexo, causa) |>
summarise(total_obitos_esperados = sum(obitos_esperados)) |>
mutate(total_obitos_esperados = round(total_obitos_esperados, 2)) %>%
mutate(taxa_mortalidade_pad =
case_when(sexo == "Masculino" ~
(total_obitos_esperados/98532431) * 100000,
sexo == "Feminino" ~
(total_obitos_esperados/104548325) * 100000)) |>
mutate(taxa_mortalidade_pad = round(taxa_mortalidade_pad, 2))
## `summarise()` has grouped output by 'ano', 'uf', 'cdmun', 'sexo'. You can
## override using the `.groups` argument.
DT::datatable(sim_2020_padronizado)
## Warning in instance$preRenderHook(instance): It seems your data is too big for
## client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html
Vamos aplicar todos os procedimentos realizados para o ano de 2020, para os anos de 2021 e 2022. #2021
Houve uma quantidade considerável de valores nulos para
alguns estados (ex.: Paraná). Por hora, vou retirar o estado para
conseguir rodar tudo, mas tendo uma carga de dados atualizada é só rodar
novamente sem o último filter.
sim_2021 <- read_excel("dados/redistribucao_CG_DO_2021.xlsx")
sim_2021_tratado <-
sim_2021 |>
mutate(taxa_especifica = (obito/populacao) * 100000) |>
mutate(taxa_especifica = round(taxa_especifica, 4))
sim_2021_tratado_censo <-
sim_2021_tratado |>
left_join(pop_censo,
by = c("idade"="Idade","sexo"="Sexo")) |>
mutate(obitos_esperados =
(Pop_censo * taxa_especifica)/100000)
sim_2021_padronizado <-
sim_2021_tratado_censo |>
group_by(ano, uf, cdmun, sexo, causa) |>
summarise(total_obitos_esperados = sum(obitos_esperados)) |>
mutate(total_obitos_esperados = round(total_obitos_esperados, 2)) %>%
mutate(taxa_mortalidade_pad =
case_when(sexo == "Masculino" ~
(total_obitos_esperados/98532431) * 100000,
sexo == "Feminino" ~
(total_obitos_esperados/104548325) * 100000)) |>
mutate(taxa_mortalidade_pad = round(taxa_mortalidade_pad, 2))
## `summarise()` has grouped output by 'ano', 'uf', 'cdmun', 'sexo'. You can
## override using the `.groups` argument.
DT::datatable(sim_2021_padronizado)
## Warning in instance$preRenderHook(instance): It seems your data is too big for
## client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html
sim_2022 <- read_excel("dados/redistribucao_CG_DO_2022.xlsx")
sim_2022_tratado <-
sim_2022 |>
mutate(taxa_especifica = (obito/populacao) * 100000) |>
mutate(taxa_especifica = round(taxa_especifica, 4))
sim_2022_tratado_censo <-
sim_2022_tratado |>
left_join(pop_censo,
by = c("idade"="Idade","sexo"="Sexo")) |>
mutate(obitos_esperados =
(Pop_censo * taxa_especifica)/100000)
sim_2022_padronizado <-
sim_2022_tratado_censo |>
group_by(ano, uf, cdmun, sexo, causa) |>
summarise(total_obitos_esperados = sum(obitos_esperados)) |>
mutate(total_obitos_esperados = round(total_obitos_esperados, 2)) %>%
mutate(taxa_mortalidade_pad =
case_when(sexo == "Masculino" ~
(total_obitos_esperados/98532431) * 100000,
sexo == "Feminino" ~
(total_obitos_esperados/104548325) * 100000)) |>
mutate(taxa_mortalidade_pad = round(taxa_mortalidade_pad, 2))
## `summarise()` has grouped output by 'ano', 'uf', 'cdmun', 'sexo'. You can
## override using the `.groups` argument.
DT::datatable(sim_2022_padronizado)
## Warning in instance$preRenderHook(instance): It seems your data is too big for
## client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html
Juntando tudo em um só arquivo.
resultado <- rbind(sim_2020_padronizado,
sim_2021_padronizado,
sim_2022_padronizado)
writexl::write_xlsx(resultado, "taxas_padronizadas_correcao.xlsx")